package 数组.排序算法;

import java.util.Arrays;

public class 冒泡排序 {
    public static void main(String[] args) {
        int[] sz = {1,5,9,7,5,2,8,9};
        System.out.println(Arrays.toString(sz));
        System.out.println(Arrays.toString(mppx(sz)));

    }

    /**
     * 冒泡排序（Bubble Sort）也是一种简单直观的排序算法。它重复地走访过要排序的数列，一次比较两个元素，
     * 如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换，也就是说该数列已经排序完成。
     * 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
     *
     *
     * 算法步骤：
     * (1)比较相邻的元素。如果第一个比第二个大，就交换他们两个。
     * (2)对每一对相邻元素作同样的工作，从开始第一对到结尾的最后一对。这步做完后，最后的元素会是最大的数。
     * (3)针对所有的元素重复以上的步骤，除了最后一个。
     * (4)持续每次对越来越少的元素重复上面的步骤，直到没有任何一对数字需要比较。
     * @param sz
     * @return
     */
    public static int[] mppx(int[] sz) {
        //控制循环次数
        for (int i = 0; i < sz.length - 1; i++) {
            boolean yh = false;//优化：通过给定的值去判定 判断是否有意义
            //控制比较次数
            for (int j = 0; j < sz.length - 1 - i; j++) {
                int ls = 0;
                //从小到大排序
                if (sz[j + 1] < sz[j]) {//改成大余是从大到小排序
                    ls = sz[j + 1];
                    sz[j + 1] = sz[j];
                    sz[j] = ls;
                    yh = true;
                }
            }
            if (yh == false){
                break;
            }
        }
        return sz;
    }

}
